#!/usr/bin/env bash

# kubenode1节点完成即可
cd /usr/local/cfssl/
# 生产CA配置文件模板
cfssl print-defaults config > config.json
# 生产CA证书签名请求文件模板
cfssl print-defaults csr > csr.json

# CA配置文件

# kubenode1节点完成即可，以下的CA证书，签名等可通过scp分发到kubenode2&kubenode3；
# ca-config.json：1个profiles，分别指定不同的过期时间，使用场景等参数，根据需要在不同场景使用不同的profile签名证书；这里以生成的模板为基础修改；
# “signing”：表示该证书可用于签名其他证书，生成的ca.pem证书中CA=TRUE；
# ”server auth“：client可用该CA对server提供的证书进行验证；
# “client auth”：server可用该CA对client提供的证书进行验证；
# 注意每个模块或每行有或没有“,”的区别

# cp config.json ca-config.json

cat > ca-config.json <<EOF
{
    "signing": {
        "default": {
            "expiry": "8760h"
        },
        "profiles": {
            "kubernetes": {
                "expiry": "8760h",
                "usages": [
                    "signing",
                    "key encipherment",
                    "server auth",
                    "client auth"
                ]
            }
        }
    }
}
EOF

# “CN”：Common Name，kube-apiserver从证书中提取该字段作为请求的用户名(User Name)；浏览器使用该字段验证网站是否合法；
# “O”：Organization，kube-apiserver从证书中提取该字段作为请求用户所属的组(Group)
cp csr.json ca-csr.json
# vim ca-csr.json
cat > ca-csr.json <<EOF
{
    "CN": "kubernetes",
    "key": {
        "algo": "rsa",
        "size": 2048
    },
    "names": [
        {
            "C": "CN",
            "ST": "ChengDu",
            "L": "ChengDu",
            "O": "k8s",
            "OU": "cloudteam"
        }
    ]
}
EOF


# 生成CA证书与秘钥
cfssl gencert -initca ca-csr.json | cfssljson -bare ca

# 查看
ls ca*

# 简单查看
# cfssl-certinfo -cert ca.pem


# 分发CA证书
# 将生成的CA证书，秘钥，配置文件等分发到所有机器；
# ca-key.pem与ca.pem重要

mkdir -p /etc/kubernetes/ssl
cp /usr/local/cfssl/ca* /etc/kubernetes/ssl/
# scp /usr/local/cfssl/ca* root@172.30.200.22:/etc/kubernetes/ssl/
# scp /usr/local/cfssl/ca* root@172.30.200.23:/etc/kubernetes/ssl/


